package com.jdd.modules.parkcar.service;

import com.jdd.common.api.vo.Result;
import com.jdd.modules.parkcar.entity.ParkCarMonthly;
import com.jdd.modules.parkcar.entity.ParkSpace;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jdd.modules.parking.entity.ParkCarEnterLog;

import java.util.List;

/**
 * @Description: 车位管理
 * @Author: jdd
 * @Date:   2021-05-31
 * @Version: V1.0
 */
public interface IParkSpaceService extends IService<ParkSpace> {
    /**
     * 月卡 新增车位
     * @param parkSpace
     * @return
     */
    Result<?> addNew(ParkSpace parkSpace);

    /**
     * 查询车场下，对应区域权限的车位
     *
     * @param permissionId 权限id
     * @return 车位号
     */
    List<ParkSpace> getFreeSpaces(String permissionId);
    /**
     * 月卡 删除车位
     * @param id
     * @return
     */
    Result<?> deleteNew(String id);
    /**
     * 更改车辆车位的状态
     * @param parkCarEnterLog 区域id
     * @param parkStatus    车位状态：0，无车辆停靠；1，有车辆停靠
     * @return  更新成功还是失败
     * @author  renshangyi
     * @date    2021-08-18
     */
    boolean updateParkStatus(ParkCarEnterLog parkCarEnterLog, String parkStatus);

    void removeAllInfo();
    /**
     * 更改车辆车位的状态
     * @param parkCarEnterLog 区域id
     * @param parkStatus    车位状态：0，无车辆停靠；1，有车辆停靠
     * @return  更新成功还是失败
     * @author  renshangyi
     * @date    2021-08-18
     */

    boolean updateParkStatusV3(ParkCarEnterLog parkCarEnterLog, String parkStatus, String plateNo);

    /**
     * 更改车辆车位的状态
     * @param parkCarEnterLog 区域id
     * @param parkStatus    车位状态：0，无车辆停靠；1，有车辆停靠
     * @return  更新成功还是失败
     * @author  renshangyi
     * @date    2021-08-18
     */
    boolean updateParkStatusNullV3(ParkCarEnterLog parkCarEnterLog, String parkStatus);

    /**
     * 批量创建车位
     * @param parkSpaces
     */
    void addParkSpaces(List<ParkSpace> parkSpaces);

    /**
     * @Title: getParkSpacePageList
     * @Description:查询月租车位信息带分页
     * @param parkSpace
     * @param page
     * @return
     * @author: zjf
     * @date 2022年1月19日
     * @version 1.0
     */
    IPage<ParkSpace> getParkSpacePageList(ParkSpace parkSpace,Page<ParkSpace> page);

    /**
     * @Title: getParkSpaceListCount
     * @Description:查询月租车是否有剩余车位
     * @param parkCode
     * @param plateNo
     * @param licenseStatusY
     * @return
     * @author: zjf
     * @date 2022年1月25日
     * @version 1.0
     */
    boolean getParkSpaceListCount(String parkCode, String plateNo, String licenseStatusY,List<ParkCarMonthly> parkCarMonthlyList);

    /** 查询区域内未绑定月租套餐的车位信息 */
    List<ParkSpace> getByAreaEffeParkNumber(String areaId,String status);

    /** 更新数据 */
    void updateBatchParkSpaceById(List<ParkSpace> list);

    /** 查询区域内所有车位信息 */
    List<ParkSpace> getByAreaParkSpace(String areaId,String status);

    /**
     * 更新指定区域下，指定车位的停放车牌号
     * @param parkNumber 车位号
     * @param areaId 区域id
     * @param plateNo 车牌号
     * @return 更新结果
     * */
    boolean updateParkPlateNo(String parkNumber,String areaId,String plateNo);
    /**
     * 获取占据车位的车牌号
     * */
    List<ParkSpace> getParkCarNumber(String monthlyCardId,String areaId);

    boolean updateSpaceCar(ParkSpace parkSpace,String plateNo);

    Integer updateSpaceNoPlate(ParkSpace parkSpace);
}
